/**
 **************************************************************************************************************************
 * Class holding a Transformation
 **************************************************************************************************************************
 * @file RBTransform.h
 **************************************************************************************************************************/


#ifndef __RBTRANSFORM_H__
#define __RBTRANSFORM_H__

/**************************************************************************************************************************
 * Includes
 **************************************************************************************************************************/
#include "RBMemObject.h"
#include "RBVector.h"
#include "RBMatrix.h"

/**************************************************************************************************************************
 * Forward declarations
 **************************************************************************************************************************/
class RBStream;

/**************************************************************************************************************************
 * Classes
 **************************************************************************************************************************/

class RBTransform : public RBMemObject
{
public:
                    RBTransform () { Rotate.SetIdentity();  Translate = float3(0,0,0); Scale = float3(1,1,1); }
                    RBTransform (const float3& Translate, const float3x3& Rotate, const float3& Scale);
                    RBTransform (const RBTransform& rhs);

    RBTransform     operator*   (const RBTransform& xForm) const;
    RBTransform     Invert      () const;
    float3          operator*   (const float3& point) const;

    RBTransform&    operator=   (const RBTransform& rhs);

    virtual void    Serialize   (RBStream& rbStream);


    float3       Translate;      
    float3x3     Rotate;
    float3       Scale;

    static const RBTransform IDENTITY;

};

/**************************************************************************************************************************/

#include "RBTransform.inl"

#endif // __RBTRANSFORM_H__
